// 负责axios的配置 导出配置好的axios
import Axios from "axios"
// 导入auth内的配置
import auth from "@/utils/auth"
import router from '@/router'
// 导入JSONbig 通过axios的配置，修改默认的转换方式
import JSONbig from 'json-bigint'
// 进行配置
// 1.基准地址的配置
Axios.defaults.baseURL = 'http://ttapi.research.itcast.cn/mp/v1_0/'
// 2.请求头的配置
// 配置不严谨
// Axios.defaults.headers.Authorrization = `Bearer ${auth.getUser().token}` 
// 3. 改json转换方式
Axios.defaults.transformResponse = [data => {
    // 通过json-bigint对data进行处理,处理后返回即可
    // data理想情况下是json数据，后台做删除的时候没响应 data === null 的
    try {
        return JSONbig.parse(data)
    } catch (e) {
        return data
    }
}]
// 严谨的配置方法  设置  请求拦截器  
Axios.interceptors.request.use(config => {
    config.headers.Authorization = `Bearer ${auth.getUser().token}`
    return config
}, e => Promise.reject(e))
// 设置响应拦截器  因为如果token失效了  本地存储的token还是失效的token这样就获取不了数据
// 响应拦截器
Axios.interceptors.response.use(res => res, err => {
    // 判断响应状态码是401，清除本地的用户信息，跳转至登录页面
    if (err.response && err.response.status === 401) {
        auth.delUser()
        // 1. 编程式导航  this.$router.push('/login')  this不是vue实例
        // 2. $router 其实就是我们自己初始化的 router实例 src/router/index.js导出
        // 3. 此模块导入路由实例，使用路由实例调用push函数即可
        router.push('/login')
    }
    return Promise.reject(err)
})

// 导出Axios配置
export default Axios
